package com.sinog.biz.service.business.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinog.biz.config.param.Converse;
import com.sinog.biz.mapper.havexml.AreaCodeFullMapper;
import com.sinog.biz.mapper.havexml.SocialTrainingMapper;
import com.sinog.biz.mapper.havexml.SystemCodeMapper;
import com.sinog.biz.service.business.SocialTrainingService;
import com.sinog.biz.util.IdGen;
import com.sinog.core.domain.JypxJg;
import com.sinog.core.util.JsonUtil;
import com.sinog.core.util.PageReturnUtil;
import com.sinog.core.utilbean.Constants;
import com.sinog.core.utilbean.Result;
import com.sinog.core.utilbean.ReturnCode;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @desc 安帮工作资源管理 - 社会就业推荐信息管理 - 就业培训机构管理 - SocialTrainingServiceImpl
 * @author huoakang
 * @date 2020-02-17
 */
@Service
public class SocialTrainingServiceImpl extends ServiceImpl<SocialTrainingMapper,JypxJg> implements SocialTrainingService {

    @Resource
    private SocialTrainingMapper socialTrainingMapper;
    @Resource
    private SystemCodeMapper systemCodeMapper;
    @Resource
    private AreaCodeFullMapper areaCodeFullMapper;

    /**
     * 安帮工作资源管理 - 社会就业推荐信息管理 - 就业培训机构管理 - 列表
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param pxnameKey pxnameKey
     * @param bffwKey bffwKey
     * @param paytypeKey paytypeKey
     * @param departId departId
     * @return String
     */
    @Override
    public String getSocialTrainingList(Integer pageIndex,Integer pageSize,
                                        @Converse(caseIf = "-1", converseTo = "0") String pxnameKey,
                                        @Converse(caseIf = "-1", converseTo = "0") String bffwKey,
                                        @Converse(caseIf = "-1", converseTo = "0") String paytypeKey,String departId) {
        Page<Map<String,String>> page = new Page<>(pageIndex + 1,pageSize);
        page = page.setRecords(socialTrainingMapper.getSocialTrainingList(page,pxnameKey,bffwKey,paytypeKey,departId));
        return PageReturnUtil.pageReturn(page);
    }

    /**
     * 安帮工作资源管理 - 社会就业推荐信息管理 - 就业培训机构管理 - （修改/新增）
     * @param data data
     * @return Result
     */
    @Override
    public Result save(String data) {
        //参数实体
        JypxJg jypxJg = JsonUtil.toBean(data,JypxJg.class);
        //对只有电话/只有固话的进行|的去除
        String pxTel = jypxJg.getPxTel();
        if (StringUtils.isNotBlank(pxTel)) {
            Character one = pxTel.charAt(0);
            Character last = pxTel.charAt(pxTel.length()-1);
            if ("|".equals(one.toString()) || "|".equals(last.toString())) {
                String pxTel1 = pxTel.replace("|","");
                jypxJg.setPxTel(pxTel1);
            }
        }
        Date date = new Date();
        jypxJg.setCreateTime(date);
        // 新增添加创建时间
        if(StringUtils.isEmpty(jypxJg.getId())) {
            jypxJg.setCreateTime(date);
            jypxJg.setId(IdGen.strid());
        } else {
            jypxJg.setUpdateUser(jypxJg.getCreateUser());
            jypxJg.setUpdateTime(date);
        }
        jypxJg.setBffwCode(Constants.NumberStr.NUM_STR_FU_ONE.equals(jypxJg.getBffwCode()) ? null : jypxJg.getBffwCode());
        // 机构地址省、市、县、街道名称
        String provinceCode = jypxJg.getProvince();
        String cityCode = jypxJg.getCity();
        String countyCode = jypxJg.getCounty();
        String villageCode = jypxJg.getVillage();
        if (StringUtils.isNotBlank(provinceCode)){
            Map<String,String> areaNames = areaCodeFullMapper.getAreaNames(provinceCode,cityCode,countyCode,villageCode);
            if (areaNames == null){
                return Result.failure(ReturnCode.SAVE_FAILED);
            }
            jypxJg.setProvinceName(areaNames.get("shengName"));
            jypxJg.setCityName(areaNames.get("dishiName"));
            jypxJg.setCountyName(areaNames.get("quxianName"));
            jypxJg.setVillageName(areaNames.get("jiedaoName"));
            if (StringUtils.isBlank(cityCode)){
                jypxJg.setCityName("");
            }
            if (StringUtils.isBlank(countyCode)){
                jypxJg.setCountyName("");
            }
            if (StringUtils.isBlank(villageCode)){
                jypxJg.setVillageName("");
            }
        } else {
            jypxJg.setProvinceName("");
            jypxJg.setCityName("");
            jypxJg.setCountyName("");
            jypxJg.setVillageName("");
        }
        jypxJg.setCreateTime(date);
        if(StringUtils.isEmpty(jypxJg.getId())) {
            // 新增添加创建时间
            jypxJg.setCreateTime(date);
            jypxJg.setId(IdGen.strid());
        } else {
            jypxJg.setUpdateUser(jypxJg.getCreateUser());
            jypxJg.setUpdateTime(date);
        }
        boolean flag = jypxJg.insertOrUpdate();
        if(flag) {
            return Result.success("保存成功");
        }
        return Result.failure(ReturnCode.SAVE_FAILED);
    }

    /**
     * 安帮工作资源管理 - 社会就业推荐信息管理 - 就业培训机构管理 - 删除
     * @param id id
     * @return Result
     */
    @Override
    public Result deleteOne(String id) {
        JypxJg jypxJg = new JypxJg();
        boolean result = jypxJg.deleteById(id);
        if(result) {
            return Result.success("删除成功！");
        }
        return Result.failure(ReturnCode.DELETE_FAILED);
    }

    /**
     * 安帮工作资源管理 - 社会就业推荐信息管理 - 就业培训机构管理 - 导出
     * @param departId departId
     * @return List<Map < String,Object>>
     */
    @Override
    public List<Map<String,Object>> selectSocialTrainingForExport(String departId) {
        return socialTrainingMapper.selectSocialTrainingForExport(departId);
    }
}